function [ P_fit ,PLOT ,PartS ] = dingwei( PartSeqence , DY_data )

s1 = 0;   %��ʼ�� ������ݼ�¼
s2 = 0;  %��ʼ�� ������м�¼
a = 100;  %����������
% W = 20; %ԭ��ĳ���
% H = 20; %ԭ��ĸ߶�
% W = 2440; %ԭ��ĳ���  
% H = 1220; %ԭ��ĸ߶�
W =2000; %ԭ��ĳ���  
H = 12000; %ԭ��ĸ߶�

i1 = 0;
fitness = -100;
D = [];
PU = [];
N = size(DY_data , 1);
NN = size(DY_data , 1);
for ii = 1 : a
    % if (~isempty(Chic_data))
    i1 = i1 + 1;  % ѡȡ��i1����
    plateU = 0; % ��ʼ�����������
    A = [0 , 0 , W , fitness]; %��ʼˮƽ�߸߶��볤��     ***Ҫ�������е��а��յ�һ���Ų�***
    b1 = min(A(: , 2)); %�жϵ�ii�ε��������ˮƽ�߸߶�b1, �����ж��
    cc = find(A(: , 2) == b1 ); %�ҵ�����A�����ˮƽ�߶�Ӧ��λ��
    c = cc(1 , 1);  % ѡ�����еĵ�һ��λ��
    % ѡȡ�����ˮƽ�߶�Ӧ������
    x = A(c , 1); %������0
    y = A(c , 2); %������
    z = A(c , 3); %���ˮƽ�߶�Ӧ�ĳ���
    for jj =  1 : 2*NN   %%%%%%%%%%%%%%%%  N ��ֵ����
        D = [];
        C = []; % ��ʼ�� ������ʱ����Ӧ�Ⱦ���
        %����һ��Ԫ�����飬���ڴ�����������ˮƽ�����С�
        AA=cell(N,1);
        
        for j = 1 : length(DY_data(: , 1)) % �Ӵ�������У�ѡ����������������롣
            
            if size(A , 1) == 1 && y + DY_data(j , 2) <= H &&  DY_data(j , 1) <= z  % ˮƽ��һ��������������
                fitness = 3; L = 01; %(x,y)-+
                B(c , :) = [x, y+DY_data(j , 2), DY_data(j , 1), fitness] ;
                B(c+1 , :) = [x+DY_data(j , 1), y, z-DY_data(j , 1), fitness];
                
                % ˮƽ������������������
            elseif size(A , 1) >= 2 && y + DY_data(j , 2) <= H &&  DY_data(j , 1) <= z
                %���ˮƽ�������
                if c == 1
                    if  DY_data(j , 1) == z && y + DY_data(j , 2) == B(c+1 , 2) % (1)������� �����ˮƽ�߿��� ��ȣ�����߶� ���� ���ˮƽ�����Ҳ�ˮƽ��֮��
                        fitness = 3; L=11; %(x,y)
                        B(c , :) = [x , y+DY_data(j , 2), z + B(c+1 , 3), fitness];   % *******���쳣ֵ Ҫ�޳�c+1��
                        B(c+1, :) = [];
                        %***********��Ҫ����Ӧ��ֵ���ھ�������һ�С�**********
                    elseif  DY_data(j , 1) == z && y + DY_data(j , 2) < B(c+1 , 2) % (2)������� �����ˮƽ�߿��� ��ȣ�����߶� С�� ���ˮƽ�����Ҳ�ˮƽ��֮��
                        fitness = 2; L=12;  %(x,y)
                        B(c , :) = [x, y+DY_data(j , 2), z, fitness];
                        
                    elseif  DY_data(j , 1) == z && y + DY_data(j , 2) > B(c+1 , 2) % (3)������� �����ˮƽ�߿��� ��ȣ�����߶� ���� ���ˮƽ�����Ҳ�ˮƽ��֮��
                        fitness = 2; L=13;  %(x,y)
                        B(c , :) = [x, y+DY_data(j , 2), z, fitness];
                        
                    elseif  DY_data(j , 1) < z && y + DY_data(j , 2) == B(c+1 , 2) % (4)������� С�� ���ˮƽ�߿��� ������߶� ���� ���ˮƽ�����Ҳ�ˮƽ��֮��
                        fitness = 1; L=14;  %(x+z-Chic_data(j , 1),y)
                        B(c , :) = [x, y, z-DY_data(j , 1), fitness];
                        B(c+1 , :) = [B(c+1 , 1) - DY_data(j , 1) , B(c+1 , 2), B(c+1 , 3)+DY_data(j , 1), fitness];
                        
                    elseif  DY_data(j , 1) < z && y + DY_data(j , 2) > B(c+1 , 2) % (5)������� С�� ���ˮƽ�߿��� ������߶� dayu ���ˮƽ�����Ҳ�ˮƽ��֮��
                        fitness = -2; L=15;  %(x,y)
                        B(c , :) = [x, y+DY_data(j , 2) , DY_data(j , 1), fitness ];  %���޸�
                        B(size(B , 1)+1 , :) = [x+DY_data(j , 1), y, z - DY_data(j , 1), fitness];
                        
                    elseif  DY_data(j , 1) < z && y + DY_data(j , 2) < B(c+1 , 2) % (6)������� С�� ���ˮƽ�߿��� ������߶� xiaoyu ���ˮƽ�����Ҳ�ˮƽ��֮��
                        %fitness = -1;
                        fitness = -2;  L=16;    %������ң��������     %%%%%%%%����
                        B(c , :) = [x, y+DY_data(j , 2) , DY_data(j , 1), fitness ];  %���޸�
                        B(size(B , 1)+1 , :) = [x+DY_data(j , 1), y, z - DY_data(j , 1), fitness];
                    end
                    %���ˮƽ�������ұ�   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  `6.20\17.27
                elseif c == size(A ,1)
                    if   DY_data(j , 1) == z && y + DY_data(j , 2) == B(c-1 , 2) % (1)������� �����ˮƽ�߿��� ��ȣ�����߶� ���� ���ˮƽ�������ˮƽ��֮��
                        fitness = 3;  L=21;  %(x,y)
                        B(c-1 , :) = [B(c-1 , 1), B(c-1 , 2), B(c-1 , 3)+DY_data(j , 1), fitness];   % Ҫ�޳�c��
                        B(c, :) = [];
                        
                    elseif  DY_data(j , 1) == z && y + DY_data(j , 2) < B(c-1 , 2)% (2)������� �����ˮƽ�߿��� ��ȣ�����߶� xiaoyu ���ˮƽ�������ˮƽ��֮��
                        fitness = 2;  L=22;  %(x,y)
                        B(c , :) = [x, y+DY_data(j , 2), z, fitness];
                        
                    elseif  DY_data(j , 1) == z && y + DY_data(j , 2) > B(c-1 , 2)% (3)������� �����ˮƽ�߿��� ��ȣ�����߶� dayu ���ˮƽ�������ˮƽ��֮��
                        fitness = 2;  L=23;  %(x,y)
                        B(c , :) = [x, y+DY_data(j , 2), z, fitness];
                        
                    elseif  DY_data(j , 1) < z && y + DY_data(j , 2) == B(c-1 , 2)% (4)������� xiaoyu���ˮƽ�߿��ȣ�����߶� dengyu ���ˮƽ�������ˮƽ��֮��
                        fitness = 1;  L=24;  %(x,y)
                        B(c-1 , :) = [B(c-1 , 1), B(c-1 , 2), B(c-1 , 3)+DY_data(j , 1), fitness]; %�޸�1.
                        B(c , :) = [x+DY_data(j , 1), y, z-DY_data(j , 1), fitness];
                        
                    elseif  DY_data(j , 1) < z && y + DY_data(j , 2) > B(c-1 , 2)% (5)������� xiaoyu���ˮƽ�߿��ȣ�����߶� dayu ���ˮƽ�������ˮƽ��֮��
                        fitness = -2;  L=25;  %��x+z-Chic_data(j , 1),y��
                        B(c , :) = [x, y, z - DY_data(j , 1), fitness];
                        B(size(B , 1)+1 , :) = [x+z-DY_data(j , 1), y+DY_data(j , 2), DY_data(j , 1), fitness];
                        
                    elseif  DY_data(j , 1) < z && y + DY_data(j , 2) < B(c-1 , 2)% (6)������� xiaoyu���ˮƽ�߿��ȣ�����߶�xiaoyu ���ˮƽ�������ˮƽ��֮��
                        %fitness = -1;
                        fitness = -2;  L=26;   %(x,y)   %����
                        B(c , :) = [x, y+ DY_data(j , 2),  DY_data(j , 1), fitness];
                        B(size(B , 1)+1 , :) = [x + DY_data(j , 1), y, z - DY_data(j , 1), fitness]; %����
                    end
                    %���ˮƽ�����м�
                else
                    if DY_data(j , 1) == z && y + DY_data(j , 2) == B(c-1 , 2) && y + DY_data(j , 2) == B(c+1 , 2)%(1)���ȵ���ˮƽ�߿��ȣ��߶ȵ�����ˮƽ�ߣ�������ˮƽ��
                        fitness = 3;  L=31;  %(x,y)
                        B(c-1 , :) = [B(c-1 , 1), B(c-1 , 2), B(c-1 , 3)+z+B(c+1 , 3), fitness];  %Ҫ�޳�c��c+1��
                        B(c+1, :) = [];
                        B(c, :) = [];
                        
                    elseif DY_data(j , 1) == z && y + DY_data(j , 2) == B(c-1 , 2) && y + DY_data(j , 2) ~= B(c+1 , 2)%(2)���ȵ���ˮƽ�߿��ȣ��߶ȵ�����ˮƽ��֮���������ˮƽ��֮��
                        fitness = 2;  L=32;  %(x,y)
                        B(c-1 , :) = [B(c-1 , 1), B(c-1 , 2), B(c-1 , 3)+z, fitness];  %Ҫ�޳�c��
                        B(c, :) = [];
                        
                    elseif DY_data(j , 1) == z && y + DY_data(j , 2) ~= B(c-1 , 2) && y + DY_data(j , 2) == B(c+1 , 2)%(3)���ȵ���ˮƽ�߿��ȣ��߶Ȳ�������ˮƽ��֮�������ˮƽ��֮��
                        fitness = 2;  L=33;  %(x,y)
                        B(c , :) = [x, y+DY_data(j , 2), z+B(c+1 , 3), fitness];  %Ҫ�޳�c��
                        B(c+1, :) = [];
                        
                    elseif DY_data(j , 1) == z && y + DY_data(j , 2) ~= B(c-1 , 2) && y + DY_data(j , 2) ~= B(c+1 , 2)%(4)���ȵ���ˮƽ�߿��ȣ��߶Ȳ�������ˮƽ��֮�bu������ˮƽ��֮��
                        fitness = 1;  L=34;  %(x,y)
                        B(c , :) = [x, y+DY_data(j , 2), z, fitness];
                        
                    elseif DY_data(j , 1) < z && y + DY_data(j , 2) == B(c-1 , 2) && y + DY_data(j , 2) ~= B(c+1 , 2)%(5)����xiaoyuˮƽ�߿��ȣ��߶ȵ�����ˮƽ��֮�bu������ˮƽ��֮��
                        fitness = 1;  L=35;  %(x,y)
                        
                        B(c-1 , :) = [B(c-1 , 1), B(c-1 , 2), B(c-1 , 3)+DY_data(j , 1), fitness];
                        B(c , :) = [x+DY_data(j , 1), y , z-DY_data(j , 1), fitness];
                        
                    elseif DY_data(j , 1) < z && y + DY_data(j , 2) == B(c-1 , 2) && y + DY_data(j , 2) ~= B(c+1 , 2)%(6)����xiaoyuˮƽ�߿��ȣ��߶�bu������ˮƽ��֮�������ˮƽ��֮��
                        fitness = 1;  L=36;  %(x+z-Chic_data(j , 1),y)
                        B(c , :) = [x, y, z-DY_data(j , 1), fitness];
                        B(c+1 , :) = [B(c+1 , 1)-DY_data(j , 1), B(c+1 , 2) , B(c+1 , 3)+DY_data(j , 1), fitness];
                        
                    elseif DY_data(j , 1) < z && y + DY_data(j , 2) > min(B(c-1 , 2), B(c+1 , 2))  %(7)����xiaoyuˮƽ�߿��ȣ��߶ȴ�����ˮƽ�ߵ���Сֵ��
                        %fitness = 0;
                        fitness = -1;  L=37;       %����
                        if B(c-1 , 2) > B(c+1 , 2)  % ��ˮƽ�ߴ�����
                            B(c , :) = [x, y+DY_data(j , 2), DY_data(j , 1), fitness];
                            B(size(B , 1)+1 , :) = [x+DY_data(j , 1), y, z-DY_data(j , 1), fitness];
                            L=371;   %(x,y)
                        else                    % ��ˮƽ�ߴ�����
                            B(c , :) = [x, y, z-DY_data(j , 1), fitness];
                            B(size(B , 1)+1 , :) = [x+z-DY_data(j , 1), y+DY_data(j , 2), DY_data(j , 1), fitness];
                            L=372;   %(x+z-Chic_data(j , 1),y)
                        end
                    elseif DY_data(j , 1) < z && y + DY_data(j , 2) < min(B(c-1 , 2), B(c+1 , 2)) %(8)����xiaoyuˮƽ�߿��ȣ��߶�xiaoyu��ˮƽ��֮�xiaoyu��ˮƽ��֮��
                        %fitness = -1;
                        fitness = -2;  L=38;  %(x,y)      %����
                        B(c , :) = [x, y+DY_data(j , 2), DY_data(j , 1), fitness];
                        B(size(B , 1)+1 , :) = [x+DY_data(j , 1), y, z-DY_data(j , 1), fitness];
                        
                    end
                end
            end
            % �õ���Ӧ�Ⱦ���
            C(j,1) = fitness; %�����j�������������Ӧ��ֵ
            LL(j,1) = L;
            B = sortrows(B,1);  %Ҫ�������е��а��յ�һ���Ų�
            %��Ԫ�����鸳ֵ
            AA{j,1} = B;
            B = A;
            fitness = -100;
        end
        if max( C ) > -100  %�ж��Ƿ������ ������ ԭ����С�
            
            c2 = max(C);
            c3 = find(C == c2);
            c3 = c3(1,1);   %ѡ��������
            L = LL( c3 , 1);
            B = AA{c3 , 1};   %�õ�ˮƽ������
            AA = cell(0); % ����
           
            %��ͼ ����
            if L==14  || L==25 || L==36 || L ==372  
                E = [ x+z-DY_data(c3 , 1),y ,DY_data(c3 , 1),DY_data(c3 , 2)];
            else
                E = [x,y,DY_data(c3 , 1),DY_data(c3 , 2)];
            end

            %��¼��ͼ����
            s1 = s1 + 1 ;
            PLOT{s1 ,1} = E;
            
            %�������������������
            plateU = plateU + DY_data(c3 , 1) * DY_data(c3 , 2)/(W * H);
            PU = [PU;plateU];
            DY_data(c3 , :) = [];  %ȥ��������������´������
            s2 = s2 + 1 ;
            PartS(1 ,s2) = PartSeqence(1 , c3); % ��¼�Ѿ��������� ��Ӧ������
            PartSeqence(: , c3) = []; % �޳����������� ��Ӧ������
            
            N = size(DY_data , 1);
            AA = cell(0);
            %         continue   %���ص�42��  ����ѡ��һ�����
        elseif size(B,1) == 1

            break;   %����30�� ��ѡ��һ���ġ�
        else         %����ˮƽ��
            
            if c == 1  %���ˮƽ�� �������
                B(c, :) = [B(c,1), B(c+1,2), B(c,3) + B(c+1,3), -100];
                B(c+1, :) = [];
                
            elseif c == size(B,1)  %���ˮƽ�� �����ұ�
                B(c-1, :) = [B(c-1,1), B(c-1,2), B(c-1,3) + B(c,3), -100];
                B(c, :) = [];
                
            else    %���ˮƽ�� ���м�
                if B(c-1, 2) > B(c+1, 2)  %��ˮƽ�߸߶� > ��ˮƽ�߸߶�
                    B(c, :) = [B(c, 1), B(c+1, 2),B(c, 3)+B(c+1, 3), -100 ];
                    B(c+1, :) = [];
                elseif B(c-1, 2) < B(c+1, 2)  %��ˮƽ�߸߶� < ��ˮƽ�߸߶�
                    B(c-1, :) = [B(c-1,1), B(c-1,2), B(c-1, 3)+B(c, 3), -100];
                    B(c, :) = [];
                else             %��ˮƽ�߸߶� = ��ˮƽ�߸߶�
                    B(c-1, :) = [B(c-1,1), B(c-1,2), B(c-1, 3)+B(c, 3)+B(c+1, 3), -100];
                    B(c+1, :) = [];
                    B(c, :) = [];
                end
                
            end
            
            A = B;
        end   %{if max( C ) > -100  %�ж��Ƿ������ ������ ԭ����С�} ���жϽ���
        
        % ����ѡ�����ˮƽ��
        b1 = min(B(: , 2)); %�жϵ�ii�ε��������ˮƽ�߸߶�b1, �����ж��
        cc = find(B(: , 2) == b1 ); %�ҵ�����A�����ˮƽ�߶�Ӧ��λ��
        c = cc(1 , 1);  % ѡ�����еĵ�һ��λ��
        % ѡȡ�����ˮƽ�߶�Ӧ������
        x = B(c , 1); %������
        y = B(c , 2); %������
        z = B(c , 3); %���ˮƽ�߶�Ӧ�ĳ���
        A = B;   %% ȷ��ˮƽ������
        
        if size(DY_data, 1) == 0 %�ж���� �Ƿ�����
            break;
        end
    end
    
    if size(DY_data , 1) == 0%�ж���� �Ƿ�����
        break;
    end
end

PU1 = [];
for n = 1  : (size(PU,1)- 1)
    if PU(n+1, 1) < PU(n, 1)
        PU1 = [ PU1; PU(n, 1) ]; %�������������ʣ������һ�飩
    end
end
PU2 = PU(end , 1)*H / max(B(:,2));  %�������������ʣ����һ�飩

P_fit =(sum(PU1) + PU2)/(size(PU1 , 1)+1);

end           